package com.tencent.wxpay.demo.controller;

import com.tencent.wxpay.demo.common.Constants;
import com.tencent.wxpay.demo.util.JSSDKSign;
import com.tencent.wxpay.demo.util.JSTicket;
import com.tencent.wxpay.demo.util.WeixinUtil;
import com.tencent.wxpay.demo.model.WeixinOauth2Token;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

/**
 * 微信支付测试总入口
 */
@Controller
@RequestMapping("index")
public class IndexController {

    /**
     * Oauth2授权第二步，通过code换取accesstoken,当然同时也获得了openid
     * @param code
     * @return
     */
    @RequestMapping("getOpenId")
    @ResponseBody
    public Map<String, Object> getOpenId(String code) {
        Map<String,Object> map = new HashMap();
        map.put("status","error");
        if(StringUtils.isNotBlank(code)) {
            WeixinOauth2Token weixinOauth2Token = WeixinUtil.getOauth2AccessToken(Constants.APPID,Constants.APPSECRET,code);
            if (null != weixinOauth2Token) {
                map.put("openid", weixinOauth2Token.getOpenId());
                map.put("status", "success");
            } else {
                map.put("msg", "获取失败，详细信息请查看服务端日志输出");
            }
        }
        return map;
    }

    /**
     * 获取JSSDK签名
     * @param url
     * @return
     */
    @RequestMapping("getJSSDKSign")
    @ResponseBody
    public Map<String, String> getJSSDKSign(String url) {
        Map<String,String> map;
        // TODO 此处的accessToken, jsTicket都是用的时候现获取的，然后保存到Constants类中，并没有做刷新处理，请使用者自行优化
        JSTicket.initJsTicket();
        map = JSSDKSign.sign(Constants.jsTicket.getTicket(),url);
        if (null != map) {
            map.put("appId", Constants.APPID);
            map.put("status", "success");
        } else {
            map = new HashMap<String, String>();
            map.put("status", "error");
            map.put("msg", "签名失败，详细信息请查看服务端日志输出");
        }
        return map;
    }
}
